package com.cxs.controller;

import com.cxs.model.User;
import org.springframework.http.HttpStatus;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/*
 * @Project:param-demo
 * @Author:cxs
 * @Motto:放下杂念,只为迎接明天更好的自己
 * */
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {

    @GetMapping("/info")
    public Map<String, Object> getUserInfo(@RequestParam(value = "id", required = false) Integer userId){
        // 方法中的两个值可以不一样，RequestParam注解是指将Query参数中的id值隐射到方法参数的userId上面
        Map<String, Object> result = new HashMap<>();
        if (!ObjectUtils.isEmpty(userId) && userId.equals(1)) {
            result.put("code", HttpStatus.OK.value());
            result.put("data", User.builder()
                    .userId(userId)
                    .username("全栈小白")
                    .build()
            );
            result.put("msg", "操作成功，接收到的id值为:" + userId);
        } else {
            result.put("code", HttpStatus.BAD_REQUEST.value());
            result.put("msg", "id为必传项或用户不存在");
        }
        return result;
    }

    @PostMapping("/save")
    public Map<String, Object> save(@RequestBody User user){
        // RequestBody 注解可以将请求体中的json数据映射到方法中的user上，注意是请求体，所以这个注解不可能用在GET方法上
        Map<String, Object> result = new HashMap<>();
        if (!ObjectUtils.isEmpty(user)) {
            result.put("code", HttpStatus.OK.value());
            result.put("data", user);
            result.put("msg", "操作成功,data值为接受到的参数");
        } else {
            result.put("code", HttpStatus.BAD_REQUEST.value());
            result.put("msg", "用户信息为必填项");
        }
        return result;
    }

    @DeleteMapping("/remove/{id}")
    public Map<String, Object> remove(@PathVariable("id") Integer userId){
        // REST风格传参，适用于各种请求方式
        // PathVariable 注解可以将服务器声明好的路径参数映射到方法的userId上，id和userId可以不同，但是PathVariable中指定的值要和路径声明的一致
        // 这种情况不需要判空，因为参数是带在路径上的
        Map<String, Object> result = new HashMap<>();
        result.put("code", HttpStatus.OK.value());
        result.put("data", userId);
        result.put("msg", "操作成功,data值为接受到的id参数");
        return result;
    }
}
